﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using BussinessLogicTecnoPez;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using Tecnopez.Globals;
using WebUtils.Controls;
public partial class Modules_ClasificacionIncubacion_emitirPlanDeClasificacion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        GenericMasterPage master = (GenericMasterPage)this.Master;
        master.Imagen = "../Styles/Icons/ic_mis_cuentas.gif";
        master.Titulo = "Emitir plan de clasificación.";
        popEspecie.ObjType = typeof(Especie);
        popEstanque.ObjType = typeof(Estanque);
        popEstanque.personalizarGestorAntesDelGetAll(cargaDeEStanques);
        inicializarGrillaDeDetalle();
        if (!IsPostBack)
        {
            multiViewPrincipal.SetActiveView(viewSeleccionDeEstanques);
            Session.Remove("planDeClasificacion");
        }
    }
    private void cargaDeEStanques(object manager)
    {

        EntityBase<Estanque>.getManager.AddFilter("tipoDeEstanqueInt", GenericManager<Estanque>.filterOperator.Equals, (int)Estanque.tipoEstanque.estCrianza);

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        decimal tamañoInicial;
        Estanque objEstanque = popEstanque.ItemSelected as Estanque;
        Especie objEspecie = popEspecie.ItemSelected as Especie;
        DateTime fecha;
        if (objEstanque == null)
        {
            lblMensajeSeleccionDeEstanques.Text = "Por favor seleccione un estanque.";
        }
        else if (objEstanque.TipoDeEstanque != Estanque.tipoEstanque.estCrianza)
        {
            lblMensajeSeleccionDeEstanques.Text = "El estanque seleccionado debe ser de crianza.";
        }
        else if (objEspecie == null)
        {
            lblMensajeSeleccionDeEstanques.Text = "Por favor ingrese una especie válida.";
        }
        else if (objEspecie.parametro == null)
        {
            lblMensajeSeleccionDeEstanques.Text = "La especie seleccionada no dispone de un parámetro de clasificación. Por favor ingrese uno dese la opción para poder generar los planes.";
        }
        else if (!DateTime.TryParse(dtFechaInicio.Text, out fecha))
        {
            lblMensajeSeleccionDeEstanques.Text = "La fecha de inicio no es válida.";
        }
        else if (!decimal.TryParse(txtTamIni.Text, out tamañoInicial))
        {
            lblMensajeSeleccionDeEstanques.Text = "El tamaño inicial del pez no es válido.";
        }
        else if (tamañoInicial > objEspecie.tamanomaximo || tamañoInicial < objEspecie.tamanominimo)
        {
            lblMensajeSeleccionDeEstanques.Text = "El tamaño inicial para esta especie debe estar entre " + objEspecie.tamanominimo.ToString() + " y " + objEspecie.tamanomaximo.ToString();
        }
        else
        {
            multiViewPrincipal.SetActiveView(viewConfirmacionDePlan);
            lblFechaInicio.Text = fecha.ToShortDateString();
            lblEspecie.Text = objEspecie.nombre;
            lblEstanque.Text = objEstanque.ToString();
            lblTamanioInicialPez.Text = txtTamIni.Text;
            lblIntervaloClasific.Text = objEspecie.parametro.intervalo.ToString();
            lblTasaDeCrecimiento.Text = objEspecie.parametro.relacionEdadTamanio.ToString();
            PlanDeClasificacion objPlan = new PlanDeClasificacion();
            objPlan.FechaInicio = fecha;
            objPlan.Estanque = objEstanque;
            objPlan.ParametroClasificacion = objEspecie.parametro;
            objPlan.Especie = objEspecie;
            objPlan.Observaciones = txtObservaciones.Text;
            if (!objPlan.tienePlanesPendientes())
            {
                objPlan.crear(tamañoInicial);
                Session["planDeClasificacion"] = objPlan;
            }
            else
            {
                multiViewPrincipal.SetActiveView(viewSeleccionDeEstanques);
                lblMensajeSeleccionDeEstanques.Text = "El estanque seleccionado tiene un plan vigente";
            }
            inicializarGrillaDeDetalle();
        }
    }

    private void inicializarGrillaDeDetalle()
    {
        DataControlField[] d = new DataControlField[1];
        ButtonField colC = new ButtonField();
        colC.ButtonType = ButtonType.Image;

        colC.CommandName = "quitar";
        colC.HeaderText = "Quitar";


        d[0] = colC;

        grdDetallePlanClasificacion.setupGrid(typeof(CronogramaDeClasificacion), cargarGrillaDetalle, true, false, this.ViewState, d);
    }

    private void cargarGrillaDetalle()
    {
        PlanDeClasificacion objPlan = Session["planDeClasificacion"] as PlanDeClasificacion;
        if (objPlan == null) return;
        grdDetallePlanClasificacion.DataSource = objPlan.DetallePlanClasificacion.ItemList;
        grdDetallePlanClasificacion.DataBind();
    }

    protected void grdDetallePlanClasificacion_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.Cells.Count < 2) return;
        if (e.Row.Cells[2].Controls.Count == 0) return;
        ImageButton img = (ImageButton)e.Row.Cells[2].Controls[0];
        img.ImageUrl = Functions.getHost(this.Page) + "Styles/Icons/eliminar.gif";
        img.ToolTip = "Presione aqui para eliminar.";
        img.CommandArgument = e.Row.RowIndex.ToString();

        img.OnClientClick = "if(!confirm('¿Seguro que desea quitar este elemento?')){ return false;}";
    }



    protected void grdDetallePlanClasificacion_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "quitar")
        {
            Int32 elemento = Convert.ToInt32(e.CommandArgument);
            PlanDeClasificacion objPlan = Session["planDeClasificacion"] as PlanDeClasificacion;
            objPlan.DetallePlanClasificacion.ItemList.RemoveAt(elemento);
            Session["planDeClasificacion"] = objPlan;
            cargarGrillaDetalle();
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        DateTime fecha;
        DateTime ultimaFecha;
        decimal tamanioEsperado;
        decimal ultimoTamanio;
        PlanDeClasificacion objPlan = Session["planDeClasificacion"] as PlanDeClasificacion;
        ultimaFecha = ((CronogramaDeClasificacion)objPlan.DetallePlanClasificacion.ItemList[objPlan.DetallePlanClasificacion.ItemList.Count - 1]).Fecha;
        ultimoTamanio = ((CronogramaDeClasificacion)objPlan.DetallePlanClasificacion.ItemList[objPlan.DetallePlanClasificacion.ItemList.Count - 1]).TamanioEsperado;
        if (!DateTime.TryParse(dtFechaAGregar.Text, out fecha))
        {
            lblMensajeAgregar.Text = "Por favor ingrese una fecha válida.";

        }
        else if (fecha < ultimaFecha)
        {
            lblMensajeAgregar.Text = "La fecha debe ser superior a la última clasificación de la lista.";
        }
        else if (!decimal.TryParse(txtTamanio.Text, out tamanioEsperado))
        {
            lblMensajeAgregar.Text = "El tamaño esperado debe ser un número válido.";
        }
        else if (tamanioEsperado <= ultimoTamanio)
        {
            lblMensajeAgregar.Text = "El tamaño esperado es mas pequeño o igual al último tamaño de la clasificación.";
        }
        else
        {
            lblMensajeAgregar.Text = "";
            CronogramaDeClasificacion nuevo = new CronogramaDeClasificacion();
            nuevo.Fecha = fecha;
            nuevo.TamanioEsperado = tamanioEsperado;
            nuevo.Realizado = "N";
            objPlan.DetallePlanClasificacion.ItemList.Add(nuevo);
            Session["planDeClasificacion"] = objPlan;
            cargarGrillaDetalle();
            txtTamanio.Text = "";
            dtFechaAGregar.Text = "";
        }
    }
    protected void btnAceptarPlan_Click(object sender, EventArgs e)
    {
        PlanDeClasificacion objPlan = Session["planDeClasificacion"] as PlanDeClasificacion;
        if (objPlan != null)
        {
            using (System.Transactions.TransactionScope transaccion = new System.Transactions.TransactionScope())
            {
                if (PlanDeClasificacion.getManager.Insert(objPlan))
                {
                    multiViewPrincipal.SetActiveView(viewPlanGenerado);
                    transaccion.Complete();
                    Session.Remove("planDeClasificacion");
                    visorDeReportes vr = new visorDeReportes();
                    vr.archivoReporte = new rptPlanDeClasificacion();
                    vr.paradescript = "";
                    vr.paravalor = "";
                    vr.selectionFormula = "{PLANESCLASIFICACION.IDPLANCLASIFICACION}=" + objPlan.IdPlanDeClasificacion;
                    vr.verReporte(Page);
                }
                else
                {
                    lblMensajeAgregar.Text = "Ocurrió un error inesperado. " + PlanDeClasificacion.getManager.GeneratedException.ToString();
                }
            }
        }
    }
}
